モジュール詳細:マークスクリプト

内側はチューリング完全、外側はド派手な縞模様。

キーを押すと、記述モードと課題表示モードを切り替えられる。課題表示モードには、記述する必要があるプログラムの説明が表示される。

記述モードの状態で電源ボタンを押すと、プログラムが実行される。プログラム実行中に再度押すと、それを強制終了させry。

テトリスのZの形をしたキーを含め、ほぼすべてのキーボード上のキーは、そのキーに表示されている文字を現在の行に追加するだけである。例外は以下の通りである。

  • : モードを切り替える。課題表示モード中は、これ以外の操作を受け付けない。
  • : 現在の行にある末尾の文字を取り除く。この操作は?を削除しようとしても実行されないことに注意すること。この行は、プログラム実行時にランダムな値が入る行である。
  • , : カーソルをそれぞれ前後の行に移動させる。

実際のキーボードも入力に使用できる。それぞれの文字、スペースキー、backspaceキー、矢印キーはその通りに機能する。 Enterキーと数字は、Shiftキーを押した状態でない限り、正常に機能する。 以下の表は、Shiftを押したときに実際のキーが何に変わるかを示している。実際のキーボードを使用する際は、NumLockの状態に気をつけること。

12345678Enter
«

プログラムは、当然のことながらMarkscriptと呼ばれるプログラミング言語で書くことになる。 以下にその完全なドキュメントを示す。 タスクで示されるすべての変数は、プログラムが実行される前に自動的に値が与えられる。 正しい出力が5回連続して返されると、モジュールは解除される。 正しくない出力が返されたり、モジュールが構文エラーのある行を実行しようとすると、画面に問題内容が表示され、プログラムは停止する。 この状態になった際は、を押すとプログラム画面に戻る。

この言語のプログラムでは、ほとんどの場合、各行が上から下へ順に実行される。 以下の例外がない限り、ある行が実行された後は、その行の下の行が実行される。

コメントはプログラマーがコードのセクションで行っていることを残しやすくするものであり、実行時にほぼ無視される。 コメントは任意の行の末尾に対して、先頭にスペースと«を付けることで加えることができる。 コメントにはスペースや数字を加えることはできず、同じコメントは複数回使用しないことが推奨される。コメントは一行につき一つまでである。

構文: [コード] «[コメント]
例: ♫0 «OWARI, ₪MUGENLOOP «MUGENLOOP, ☼X 21 «HOGE, HENSU√ «FUGA

変数は、プログラムが今後使用するため保持しておく数値のデータである。 変数は、まずを入力し、その後ろに変数名、スペース、数字または宣言済みの変数名を入力して宣言する。 既に存在する名前で新しい変数を宣言しようとするとエラーになる。 宣言済みの変数に割り当てられた値を変更するには、定義済みの変数名の後にを付ける。 数値の前にを付けることで、値を負の数にすることもできる。変数名に対してこれを行うことはできないので注意すること。

構文: √[名前] [値]
例: √SIX 7, SIX√ 6 «SYUSEI, √COPY ORIGINAL, √MINUSONE ♣1

Ifステートメントは、特定の条件が真であるか判定する際に使われる。Ifステートメントを作成するには、開始行にを入力し、その後に変数名、スペース、チェックしたい内容に対応する適切なシンボルセット、比較対象の値を続けて入力する。条件は = 「〜より小さい」, ∩∩ = 「〜と等しい」, ♣∩ = 「〜より大きい」が使用できる。条件が真である場合、次に実行される行の位置は、その行の一つ下にある行はスキップされる

構文: ◊[名前] [条件][値]
例: ◊NUM ∩∩0, ◊SMALLNUM ∩♣10, ◊KUSODEKA ♣∩MILLION, ◊ANSWER ∩42

ジャンプはプログラム内の別の部分へ移動する際に使われる。ジャンプを記述するには、最初にを入力し、 ジャンプしたい行のコメントを記述する。 複数の行にそのコメントがある場合、一番上が使用される。

構文: ₪[コメント]
例: ₪TOP, ₪BACK, ₪JUMPSAKI, ₪JUMPTWO «JUMPONE

加算は、この言語で唯一直接使用できる数学演算である。記述するには、最初にを記入し、その後に変数名、スペース、加算したい値を入力する。加算後の新たな値は自動的に代入される。

構文: ☼[名前] [値]
例: ☼SMALLNUM 100, ☼KOREDEMO UGOKIMASU, ☼NIBAI NIBAI, ☼HINT ♣1

リターンは、特定の値を出力してプログラムを終了する際に使用される。 リターンを行うには、最初にを記述し、リターンしたい値を続けて記入する。間違った値がリターンされるとエラーとなる。

構文: ♫[値]

例: ♫0, ♫HENSUMOUGOKUYO, ♫♣1, ♫1 «FINISH

タスク一覧とその和訳

タスクは「Create a program which returns ...」(...を返すプログラムを作成せよ)から始まる
命令和訳
√P times √Q√Pの√Q倍
√Q is divisible by 5, and 0 otherwise√Qが5で割り切れる場合は1、それ以外は0
the larger value minus the smaller value when given numbers √P and √Q値√Pと√Qに対し、大きい方から小さい方を引いた値
what you would need to add to √Q to get 0√Qに足して0にするために必要な数
the √Qth triangular number (sequence is 1, 3, 6, 10, 15, 21 etc.)√Q番目の三角数(1, 3, 6, 10, 15, 21 ...)
the √Qth Fibonacci number (sequence is 1, 1, 2, 3, 5, 8, 13 etc.)√Q番目のフィボナッチ数(1, 1, 2, 3, 5, 8, 13 ...)
√P modulo √Q (the remainder after a division)√Pを√Qでモジュロした値(除算の剰余)
the average between √P and √Q (add them then divide by 2)√Pと√Qの平均(両方を足して2で割る)
√P times 2, minus √Q√Pを2倍し、√Qを引く
√Q divided by 2 if √Q is even, and √Q times 3 plus 1 otherwise√Qが偶数の場合は2で割り、そうでない場合は√Qを3倍して1を足した値
the digital root of √Q (adding up all digits until you end up with just one digit)√Qの数字根(各桁を一桁になるまで足し合わせる)
√Q, times itself√Qに自身の数を掛けた値
the value 1-4 missing when given numbers √P, √Q, and √R値1-4を取る√P, √Q, √Rに対し、唯一存在しない値
the closest multiple of 9 to given number √Q√Qに最も近い9の倍数
the middle value when given numbers √P, √Q, and √R√P, √Q, √Rに対する中央値
the greatest divisor of √P and √Q√Pと√Qの最大公約数
the number of 1s within number √Q when converted to binary (base 2 instead of 10)√Qをバイナリ(二進数)で表した時の1の個数
the sum of the first √Q positive even numbers先頭√Q個の正の偶数の総和
the area of a triangle with base √P and height √Q底辺が√Pで高さが√Qの三角形の面積
the sum of all odd numbers between √P and √Q (inclusive)(端点を含む)√Pから√Qの間にあるすべての奇数の総和
the sum of the highest √Q odd numbers less than 100100未満の奇数のうち上から√Q個の総和